package com.itHsuDS.recursion;

import java.util.Arrays;

public class MiGong {
    public static void main(String[] args) {
        //创建一个二维数组模拟迷宫
        int[][] map=new int[8][7];

        //使用1表示墙
        //上下置为1
        for (int i = 0; i < 7; i++) {
            map[0][i]=1;
            map[7][i]=1;
        }
        //左右置为1
        for (int i = 0; i < 8; i++) {
            map[i][0]=1;
            map[i][6]=1;
        }
        map[3][1]=1;
        map[3][2]=1;

        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }

        setWay(map,1,1);

        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
    }

    /**
     * 当map[i][j]为0表示没走过，1表示墙，2表示可以走，3表示已经走过但走不通
     * 策略：先走下->右->上->左，如果该点走不通，再回溯
     * @param map 地图
     * @param i 从哪个位置开始找
     * @param j
     * @return  如果找到通路返回true否则false
     */
    public static boolean setWay(int[][]map,int i,int j){
        if(map[6][5]==2){
            return true;
        }else {
            if(map[i][j]==0){//表示该点没走过
                //下右上左
                map[i][j]=2;//假定该点可走通
                if(setWay(map,i+1,j)){//下
                    return true;
                }else if(setWay(map,i,j+1)){//右
                    return true;
                }else if(setWay(map,i-1,j)){//上
                    return true;
                }else if(setWay(map,i,j-1)){//左
                    return true;
                }else {
                    map[i][j]=3;//走不通
                    return false;
                }
            }else {//如果map[i][j]不等于0，有可能是1,2,3
                return false;
            }
        }
    }
}
